Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java Cryptography Extension</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Java_Cryptography_Extension"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_Cryptography_Extension rootpage-Java_Cryptography_Extension skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Java Cryptography Extension</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Die <b>Java Cryptography Extension</b> (<b>JCE</b>) ist eine <a href="Programmierschnittstelle" title="Programmierschnittstelle">Schnittstelle</a> der <a href="Programmiersprache" title="Programmiersprache">Programmiersprache</a> <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> und <a href="Framework" title="Framework">Framework</a> für kryptographische Aufgaben wie <a href="Verschl%C3%BCsselung" title="Verschlüsselung">Verschlüsselung</a>, Kommunikations-<a href="Authentifizierung" title="Authentifizierung">Authentifizierung</a> und <a href="Schl%C3%BCssel_(Kryptologie)" title="Schlüssel (Kryptologie)">Schlüssel</a>verwaltung. Seit dem <a href="Java_Development_Kit" title="Java Development Kit">JDK</a> 1.4 ist sie Teil der <a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">Java Platform, Standard Edition</a>, davor war sie (ab JDK 1.2) als optionales Paket erhältlich.
</p><p>Die Java Cryptography Extension beruht auf derselben Architektur wie die Java Cryptography Architecture (JCA) und wird als Teil der JCA gesehen. Die Aufteilung in JCA und JCE war nötig, weil die USA früher den Export kryptographischer Systeme beschränkten. Die JCA enthält nur <a href="Hashfunktion" title="Hashfunktion">Hashfunktionen</a>, Schlüsselgeneratoren usw. und durfte frei exportiert werden. Für starke Verschlüsselungsalgorithmen galt dies nicht; deshalb lagerte man sie in die JCE aus. Implementierungen mussten von anderer Stelle bezogen werden.
</p><p>Wie die Klassen der JCA liegen die der JCE heute in den Packages <code>java.security</code> und <code>javax.crypto</code>.
</p>

<div class="mw-heading mw-heading2"><h2 id="Funktionalität"><span id="Funktionalit.C3.A4t"></span>Funktionalität</h2></div>
<p>Die Java Cryptography Extension basiert auf sogenannten Kryptographie-Providern, das sind Implementierungen von verschiedenen, durch die JCE abstrahierten kryptographischen Konzepten. Neue Konzepte können leicht hinzugefügt werden.
</p><p>Die Java Cryptography Extension bietet folgende Funktionalitäten:
</p>
<ul><li><i>Cipher</i> – Kryptographische <a href="Algorithmus" title="Algorithmus">Algorithmen</a> (<a href="Symmetrisches_Kryptosystem" title="Symmetrisches Kryptosystem">symmetrische</a> und <a href="Asymmetrisches_Kryptosystem" title="Asymmetrisches Kryptosystem">asymmetrische</a>) zum Verschlüsseln, <a href="Blockverschl%C3%BCsselung" title="Blockverschlüsselung">Block-</a> und <a href="Stromverschl%C3%BCsselung" title="Stromverschlüsselung">Streamchiffren</a></li>
<li><i>Key Management</i> – Die Klassen <code>KeyGenerator</code> für die Schlüsselgenerierung, <code>KeyAgreement</code> zum sicheren Aushandeln von Schlüsseln sowie <code>SecretKeyFactory</code> zur Zerlegung von Schlüsseln in ihre Anteile</li>
<li><i>Message Authentication Codes</i> – zur Berechnung von Authentifizierungen für Kommunikationen</li>
<li>Sichere Objekte und <a href="Digitale_Signatur" title="Digitale Signatur">digitale Signaturen</a></li></ul>
<p>Die Java Cryptography Extension ist, wie auch die Java Cryptography Architecture, von der Implementierung der konkreten Algorithmen unabhängig. Über ein <a href="Service_Provider_Interface" title="Service Provider Interface">Service Provider Interface</a> (SPI) können unterschiedliche Implementierungen von unterschiedlichen Herstellern gleichzeitig in die Java-Laufzeitumgebung eingebunden werden. Java wird ab Version 1.4 mit einer JCE und JCA Implementierung ausgeliefert, andere Implementierungen können aber einfach sowohl statisch als auch dynamisch nachgeladen werden.
</p><p>Zu den bekanntesten JCE-Implementierungen gehören:
</p>
<ul><li><i><a href="Bouncy_Castle" title="Bouncy Castle">Bouncy Castle</a></i> – eine <a href="Open_Source" title="Open Source">Open-Source</a>-Implementierung der <i>Java Cryptography Extension</i> und eine „leichtgewichtige“ Java-Cryptography-API für J2ME und JDK.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></li>
<li>IAIK-JCE – eine Implementierung des Instituts für Angewandte Informationsverarbeitung und Kommunikationstechnologie (IAIK) der <a href="Technische_Universit%C3%A4t_Graz" title="Technische Universität Graz">Technischen Universität Graz</a>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Beispiel">Beispiel</h2></div>
<p>Das folgende Beispiel zeigt die Verschlüsselung und Entschlüsselung eines <a href="Zeichenkette" title="Zeichenkette">Strings</a> mittels <a href="Advanced_Encryption_Standard" title="Advanced Encryption Standard">AES</a>-<a href="Cipher_Block_Chaining_Mode" title="Cipher Block Chaining Mode">CBC</a> mit <a href="Padding_(Informatik)" title="Padding (Informatik)">Padding</a> nach <a href="PKCS" class="mw-redirect" title="PKCS">PKCS</a> #7:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// Schlüssel erzeugen</span>
<span class="n">SecretKey</span><span class="w"> </span><span class="n">secretKey</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KeyGenerator</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">"AES"</span><span class="p">).</span><span class="na">generateKey</span><span class="p">();</span>

<span class="c1">// Verfahren wählen</span>
<span class="n">Cipher</span><span class="w"> </span><span class="n">cipher</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Cipher</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">"AES/CBC/PKCS7PADDING"</span><span class="p">);</span>
<span class="n">cipher</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="n">Cipher</span><span class="p">.</span><span class="na">ENCRYPT_MODE</span><span class="p">,</span><span class="w"> </span><span class="n">secretKey</span><span class="p">);</span>

<span class="c1">// Umwandlung des Strings nach Bytes basierend auf UTF-8</span>
<span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">utf8Bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Zu verschlüsselnder String"</span><span class="p">.</span><span class="na">getBytes</span><span class="p">(</span><span class="s">"UTF8"</span><span class="p">);</span>

<span class="c1">// Verschlüsselung</span>
<span class="kt">byte</span><span class="o">[]</span><span class="w"> </span><span class="n">encryptedBytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cipher</span><span class="p">.</span><span class="na">doFinal</span><span class="p">(</span><span class="n">utf8Bytes</span><span class="p">);</span>

<span class="c1">// Base64 encoding um wieder einen String zu bekommen</span>
<span class="n">String</span><span class="w"> </span><span class="n">encryptedString</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">java</span><span class="p">.</span><span class="na">util</span><span class="p">.</span><span class="na">Base64</span><span class="p">.</span><span class="na">getEncoder</span><span class="p">().</span><span class="na">encodeToString</span><span class="p">(</span><span class="n">encryptedBytes</span><span class="p">);</span>

<span class="c1">// Cipher für Entschlüsselung vorbereiten</span>
<span class="n">cipher</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="n">Cipher</span><span class="p">.</span><span class="na">DECRYPT_MODE</span><span class="p">,</span><span class="w"> </span><span class="n">secretKey</span><span class="p">);</span>

<span class="c1">// Rückumwandlung in Byte-Array</span>
<span class="n">encryptedBytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">java</span><span class="p">.</span><span class="na">util</span><span class="p">.</span><span class="na">Base64</span><span class="p">.</span><span class="na">getDecoder</span><span class="p">().</span><span class="na">decode</span><span class="p">(</span><span class="n">encryptedString</span><span class="p">);</span>

<span class="c1">// Entschlüsselung</span>
<span class="n">utf8Bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cipher</span><span class="p">.</span><span class="na">doFinal</span><span class="p">(</span><span class="n">encryptedBytes</span><span class="p">);</span>

<span class="c1">// Rückumwandlung in einen String</span>
<span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">String</span><span class="p">(</span><span class="n">utf8Bytes</span><span class="p">,</span><span class="w"> </span><span class="s">"UTF8"</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Jason Weiss: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Java Cryptography Extensions</cite>. Practical Guide for Programmers. Morgan Kaufmann, 2004, ISBN 978-0-12-742751-5 (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Java+Cryptography+Extension&amp;rft.au=Jason+Weiss&amp;rft.btitle=Java+Cryptography+Extensions&amp;rft.date=2004&amp;rft.genre=book&amp;rft.isbn=9780127427515&amp;rft.pub=Morgan+Kaufmann" style="display:none">&nbsp;</span></li>
<li>Rich Helton, Johennie Helton: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Java Security Solutions</cite>. Wiley, 2002, ISBN 978-0-7645-4928-1 (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Java+Cryptography+Extension&amp;rft.au=Rich+Helton%2C+Johennie+Helton&amp;rft.btitle=Java+Security+Solutions&amp;rft.date=2002&amp;rft.genre=book&amp;rft.isbn=9780764549281&amp;rft.pub=Wiley" style="display:none">&nbsp;</span></li>
<li>David Hook: <cite class="lang" lang="en" dir="auto" style="font-style:italic">Beginning Cryptography with Java</cite>. John Wiley &amp; Sons, 2005, ISBN 978-0-7645-9633-9 (englisch).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Java+Cryptography+Extension&amp;rft.au=David+Hook&amp;rft.btitle=Beginning+Cryptography+with+Java&amp;rft.date=2005&amp;rft.genre=book&amp;rft.isbn=9780764596339&amp;rft.pub=John+Wiley+%26+Sons" style="display:none">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external free" href="https://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html">https://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html</a> Java Cryptography Architecture (JCA) Reference Guide</li>
<li><a rel="nofollow" class="external free" href="https://docs.oracle.com/javase/tutorial/security/index.html">https://docs.oracle.com/javase/tutorial/security/index.html</a> – Java Tutorial zu Security im Allgemeinen</li>
<li><a rel="nofollow" class="external free" href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/overview/jsoverview.html">https://docs.oracle.com/javase/7/docs/technotes/guides/security/overview/jsoverview.html</a> – Übersicht über Java Security</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.bouncycastle.org/">JCE Provider der australischen Organisation The Legion of the Bouncy Castle</a></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://jce.iaik.tugraz.at/products/core-crypto-toolkits/jca-jce/">IAIK-JCE Provider der TU Graz</a></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-05-01" href="https://de.wikipedia.org/wiki/?title=Java_Cryptography_Extension&amp;oldid=255636060">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>